import unittest

from parameterized import parameterized

from automatic.base.get_driver import GetDriver
from automatic.base.get_logger import GetLogger
from automatic.page.page_login import PageLogin
from automatic.page.page_task_add import PageTaskAdd
from automatic.tools.read_text import read_txt

# 获取log 日志器
log = GetLogger().get_logger()


def get_task_add_task():
    arrs = []
    for data in read_txt("taskadd.txt"):
        arrs.append(tuple(data.strip().split(",")))
    return arrs[1:]


# 新建 新建任务测试类 并 继承 unittest.TestCase
class TestAddTask(unittest.TestCase):
    # 新建setUpClass
    @classmethod
    def setUpClass(cls) -> None:
        try:
            # 实例化 并 获取 driver
            cls.driver = GetDriver.get_driver()
            # 实例化PageLogin()
            cls.login = PageLogin(cls.driver)
            # 执行登录操作
            cls.login.page_login_success()
            # 实例化TaskAdd()
            cls.task_add = PageTaskAdd(cls.driver)
        except Exception as e:
            # 截图
            cls.task_add.base_get_img()
            # 日志
            log.error("错误：{}".format(e))

    # 新建tearDownClass
    @classmethod
    def tearDownClass(cls) -> None:
        # 关闭driver驱动对象
        GetDriver.quit_driver()

    # 新建 新建任务测试方法
    # 使用parameterized进行参数化
    @parameterized.expand(get_task_add_task())
    def test_add_task(self, task_name, task_description, file_path, expect_result, status):
        try:
            # 判断是否为正向
            if status == "true":
                # 调用 新建任务业务
                self.task_add.page_task_add(task_name, task_description, file_path)
                # 这里需要根据实际情况添加断言来验证任务是否成功创建
                # 验证页面上是否显示任务已创建的提示信息
                # 页面上有一个元素用于显示任务创建成功的提示信息
                # 断言是否新建任务成功
                msg = self.task_add.task_add_get_success_info()
                print(msg)
                try:
                    self.assertEqual(msg, expect_result)
                except Exception as e:
                    # 截图
                    self.task_add.base_get_img()
                    # 日志
                    log.error("出错了：{}".format(e))
                # 点击任务管理，返回主页面
                self.task_add.task_management()
            # 逆向用例
            else:
                # 调用 新建任务业务
                self.task_add.page_task_add_empty_info(task_name,task_description)
                if task_name is None or task_name == "":
                    # 获取错误提示信息
                    msg = self.task_add.task_add_empty_task_name_info()
                    print("msg:", msg)
                    try:
                        self.assertEqual(msg, expect_result)
                    except Exception as e:
                        # 截图
                        self.task_add.base_get_img()
                        # 日志
                        log.error("出错了：{}".format(e))
                    self.task_add.task_management()
                elif task_description is None or task_description == "":
                    # 获取错误提示信息
                    msg=self.task_add.task_add_empty_task_descript_info()
                    print("msg:",msg)
                    try:
                        self.assertEqual(msg,expect_result)
                    except Exception as e:
                        #截图
                        self.task_add.base_get_img()
                        #日志
                        log.error("出错了：{}".format(e))
                    self.task_add.task_management()
        except Exception as e:
            # 截图
            self.task_add.base_get_img()
            # 日志
            log.error("出错了：{}".format(e))


if __name__ == '__main__':
    unittest.main()
